﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Negocio.View;
using Negocio.Generico;
using PresentacionWindows.Base;
using Integra.Comun;

namespace PresentacionWindows
{
    public partial class uscRenglones : UserControlBase
    {
        #region Propiedades

        bool bEditando = false;

        #endregion

        #region Inicializacion

        public uscRenglones(PersonaDTO tokenUsuario)
        {
            this.TokenUsuario = tokenUsuario;
            InitializeComponent();
            DSToBinding();
        }

        #endregion

        #region Eventos



  

  
        #endregion

        #region Metodos privados

        /// <summary>
        /// Inicializa los datos propios del formulario en función de los eventos asociados.
        /// </summary>
        private void DSToBinding() 
        {
            #region Carga de combos

            //Carga de los valores del combo del listado de titularidades
            AsignaturaView obj = AsignaturaView.GetInstance();
            AsignaturaDTO filtroAsignaturas = new AsignaturaDTO();
            //El filtro siempre se hace en funcion de la persona. El token usuario
            //contiene el co_Persona de un profesor
            filtroAsignaturas.CoProfesor = this.TokenUsuario.CoProfesor;
            this.cboAsignatura.SelectedIndexChanged -= new System.EventHandler(this.cboAsignatura_SelectedIndexChanged);
            ControlDatos.CargarCombo(this.cboAsignatura, obj.GetAsignaturasViewByAsignatura(filtroAsignaturas), "NOMBRE", "CODIGOASIGNATURA", TipoCargaCombo.Normal);
            this.cboAsignatura.SelectedIndexChanged += new System.EventHandler(this.cboAsignatura_SelectedIndexChanged);

            #endregion

            #region Carga de los renglones

            RecargaMiniRenglones();

            #endregion

        }

        
        /// <summary>
        /// Método que recarga sin filtro
        /// </summary>
        private void RecargaMiniRenglones() 
        {
            RenglonDTO filtro = new RenglonDTO();
            filtro.CoAsignatura = Int32.Parse(this.cboAsignatura.SelectedValue.ToString());
            this.RecargaMiniRenglones(filtro);
        }

        /// <summary>
        /// Método que recarga el grid por completo 
        /// </summary>
        private void RecargaMiniRenglones(RenglonDTO filtro)
        {
            try
            {
                RenglonView vista = RenglonView.GetInstance();
                RenglonDTO dto;
                if (filtro == null)
                {
                    dto = new RenglonDTO();
                }
                else
                {
                    dto = filtro;
                }
                this.pnlRenglones.Controls.Clear();
                DataTable dt=vista.GetViewRenglon(filtro).Table;
                int numeroElementos=dt.Rows.Count;
                int i=0;
                foreach (DataRow dr in dt.Rows) 
                {
                    i++;
                    RenglonDTO obj = new RenglonDTO();
                    obj.CoRenglon = Int32.Parse(dr["CODIGORENGLON"].ToString());
                    obj.Nombre = dr["NOMBRE"].ToString();
                    obj.Publico = Convert.ToBoolean(dr["PUBLICO"].ToString());
                    obj.CoTipoRenglon = Int32.Parse(dr["CODIGOTIPORENGLON"].ToString());
                    obj.FchCreacion = DateTime.Parse(dr["FECHACREACION"].ToString());
                    obj.FchRequerimiento = DateTime.Parse(dr["FECHAREQUERIMIENTO"].ToString());
                    obj.CoAsignatura = Int32.Parse(dr["CODIGOASIGNATURA"].ToString());
                    uscMiniUnidadRenglon usc = new uscMiniUnidadRenglon(obj);
                    usc.btnEliminarE += new System.EventHandler(this.btnEliminar_Click);
                    usc.btnModificarE += new System.EventHandler(this.btnModificar_Click);

                    pnlRenglones.Controls.Add(usc);
                    if(i>1)
                    {
                        usc.Location= new System.Drawing.Point(0,(i-1)*100);
                    }
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.ToString());
            }
        }

        #endregion


        #region Eventos

        private void cboAsignatura_SelectedIndexChanged(object sender, EventArgs e)
        {
            RenglonDTO filtro = new RenglonDTO();
            filtro.CoAsignatura = Int32.Parse(this.cboAsignatura.SelectedValue.ToString());
            RecargaMiniRenglones(filtro);
        }

        private void btnAgregar_Click(object sender, EventArgs e)
        {
            try
            {
                RenglonDTO filtro = new RenglonDTO();
                filtro.CoAsignatura = Int32.Parse(this.cboAsignatura.SelectedValue.ToString());
                frmRenglon frm = new frmRenglon(filtro,false);
                frm.ShowDialog();
                RecargaMiniRenglones();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error en el alta del renglon.Excepcion:" + ex.Message);
            }
        }


        private void btnEliminar_Click(object sender, EventArgs e)
        {
            try
            {
                RenglonDTO filtro = new RenglonDTO();
                filtro.CoRenglon = ((CoRenglonEventArgs)e).Valor;
                GenericaView vista = GenericaView.GetInstance();
                if (vista.Elimina(filtro)) 
                {
                    MessageBox.Show("Se ha eliminado correctamente la asignatura");
                    RecargaMiniRenglones();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error en la eliminación del renglon.Excepcion: " + ex.Message);
            }
        }



        private void btnModificar_Click(object sender, EventArgs e)
        {
            try
            {
                RenglonDTO filtro = new RenglonDTO();
                filtro.CoRenglon=((CoRenglonEventArgs)e).Valor;
                filtro.CoAsignatura = Int32.Parse(this.cboAsignatura.SelectedValue.ToString());
                frmRenglon frm = new frmRenglon(filtro,false);
                frm.ShowDialog();
                RecargaMiniRenglones();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error en la modificacion del renglon.Excepcion:" + ex.Message);
            }
        }



        #endregion
    }
}
